"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/3/4 13:44
@Description :   类中的魔术方法

魔术方法: 在定义类时 里面包含了一些隐式的方法，在某些场景下会自动调用
"""
import random

class Person:
    name = 'tom'
    age = 23
    sex = '男'

    def show_info(self):
        return f'name = {self.name} ,age = {self.age}'

    #  该方法当一个对象被打印输出时 会被自动调用
    def __str__(self):
        return f'name = {self.name} ,age = {self.age},sex = {self.sex}'

    #  判定相等
    def __eq__(self, other):
        print('--------__eq__-------')
        return self.name == other.name and self.age == other.age and self.sex == other.sex

    #  hash
    def __hash__(self):
        print('----------__hash__------------')
        num = random.randint(1, 100)
        print(f'random = {num}')
        return num

    #  判定大于
    def __gt__(self, other):
        print('--------__gt__--------')
        return self.age > other.age

    # 判定小于
    def __lt__(self, other):
        print('--------__lt__--------')
        return self.age < other.age

    # >=
    def __ge__(self, other):
        print('--------__ge__--------')
        return self.age >= other.age

    # <=
    def __le__(self, other):
        print('--------__le__--------')
        return self.age <= other.age


person1 = Person()
person2 = Person()
# person2.age = 30
# person2 = person1
# 0x0000017DFC6DD9A0
print(person1)
# print(person.name)
# print(person.age)
# print(person.show_info())

print(f'person1==person2:{person1 >= person2},person1.id = {id(person1)},person2.id = {id(person2)}')


'''
集合中存储的数据  特点 :  无序  不可重复    判定重复   __hash__  __eq__
 1. __hash__   返回int值
      1.1返回的值不同  则判定为两个对象不相等  
      1.2返回值相同  则调用__eq__ 再次进行判定    hash运算时不同的值可能会有相同的结果  hash('') hash碰撞 
'''
str_set = {'tom', 'jack', 'tom', 'xiaoming', 'admin', 'super'}
print(str_set)

obj_set = {person1, person2}
print(len(obj_set))
